package it.unisa.unibox.gestioneProdotti;


import it.unisa.unibox.beans.Curatela;
import it.unisa.unibox.beans.Ricercatore;
import it.unisa.unibox.commons.DBConstants;
import it.unisa.unibox.commons.DBNames;
import it.unisa.unibox.facade.FacadeProdotti;
import it.unisa.unibox.facade.IFacadeProdotti;
import it.unisa.unibox.otherServlets.UtilityFunctions;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
public class ModificaCuratelaServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public static ServletContext servletContext;

	
	private String filePath;
	    

	public static IFacadeProdotti facade;


	public ModificaCuratelaServlet() {
		super();
	}

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		try {
			super.init(config);			
			servletContext = getServletConfig().getServletContext();
			filePath = servletContext.getRealPath("files");
			facade = new FacadeProdotti();

		} 

		catch (Exception e) {
			e.printStackTrace();
		}
	}


	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doPost(request,response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html");
		response.setHeader("Cache-Control",	"no-store, no-cache, must-revalidate");
		PrintWriter out = response.getWriter();
	
		String risp="";
		
		Curatela prodotto = creaBean(request);

		if(prodotto!=null){
			
			if(facade.checkConflitto(Integer.parseInt(request.getParameter(DBNames.ATT_PRODOTTO_ID)),
					request.getParameter(DBNames.ATT_PRODOTTO_TITOLO), 
					request.getParameter(DBNames.ATT_PRODOTTO_TIPOLOGIA), 
					Integer.parseInt(request.getParameter(DBNames.ATT_PRODOTTO_ANNO)),
					request.getParameter(DBNames.ATT_PRODOTTO_URL))){
				
					risp="conflitto";
					System.out.println("conflitto trovato");
			}
			else{
				risp="ok";
			}

			if(facade.modificaProdotto(prodotto)){	

				String autori = request.getParameter("autori");
				
				ArrayList<Integer> lista = UtilityFunctions.mySplit(autori);
	
				Ricercatore rc = (Ricercatore) request.getSession().getAttribute("ricercatore");
		
				if(facade.aggiornaListaAutori(prodotto.getId(), lista, rc.getId())){
					
					out.write(risp);
				}
			}
			else
				out.write("no");
		}
		
	}

	protected Curatela creaBean(HttpServletRequest request){


		Curatela p = null;

		int id = Integer.parseInt(request.getParameter("id"));
		String titolo = request.getParameter(DBNames.ATT_PRODOTTO_TITOLO);
		String abstract_field = request.getParameter("abstract_field");
		int anno = 	Integer.parseInt(request.getParameter(DBNames.ATT_PRODOTTO_ANNO));
		String lingua = request.getParameter(DBNames.ATT_PRODOTTO_LINGUA);  
		String url = request.getParameter(DBNames.ATT_PRODOTTO_URL); 
		String note = ""; 
		
		
		String tipologia = request.getParameter(DBNames.ATT_PRODOTTO_TIPOLOGIA);
		int stato = request.getParameter(DBNames.ATT_PRODOTTO_STATO)==null ? DBConstants.PRODOTTO_STATO_DRAFT : DBConstants.PRODOTTO_STATO_COMPLETO;
		int pubblico = request.getParameter(DBNames.ATT_PRODOTTO_PUBBLICO).equalsIgnoreCase("si") ? DBConstants.PRODOTTO_DOMINIO_PUBBLICO : DBConstants.PRODOTTO_DOMINIO_PRIVATO;
		System.out.println("->>>> "+request.getParameter(DBNames.ATT_PRODOTTO_ANNO));

		String testo = request.getParameter("testo");  
		
		if(!UtilityFunctions.controllaCampi(titolo, abstract_field, anno, lingua, url) 
				|| !controllaCampiCuratela(testo))
			return p;
		else
				p = new Curatela(id,(Ricercatore) request.getSession().getAttribute("ricercatore"),
						tipologia,
						titolo, 
						abstract_field,
						stato,
						pubblico,
						anno,
						lingua,
						url,
						note,
						testo); 
		
		System.out.println(p);
	
		return p;
	}
	
	
	private static boolean controllaCampiCuratela(String testo){
		if(testo.length() < 1 || testo.length() > 120 || testo.equals("") )
			return false;
		
		return true;
	}
	
}
